#ifndef BOX_H
#define BOX_H

#ifdef __cplusplus
extern "C" {
#endif

struct box{
    float x, y, w, h;
    box():x(0.f), y(0.f), w(0.f), h(0.f){}
    box(float x, float y, float w, float h):x(x), y(y), w(w), h(h){}
};

typedef struct {
    float dx, dy, dw, dh;
} dbox;

box float_to_box(float *f);

float box_iou(box a, box b);

float box_rmse(box a, box b);

dbox diou(box a, box b);

void do_nms(box *boxes, float **probs, int total, int classes, float thresh);

void do_nms_sort(box *boxes, float **probs, int total, int classes, float thresh);

void do_nms_obj(box *boxes, float **probs, int total, int classes, float thresh);

box decode_box(box b, box anchor);

box encode_box(box b, box anchor);

#ifdef __cplusplus
}
#endif

#endif
